home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / vlalloc.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  2KB  |  112 lines

  1. /*
  2.  * Copyright (c) 1989, 1990, 1991 by the University of Washington
  3.  *
  4.  * For copying and distribution information, please see the file
  5.  * <copyright.h>.
  6.  *
  7.  * v1.1.2 - gf  11/02/91 - renamed ZERO() to BZERO() for X
  8.  */
  9.  
  10. #include <copyright.h>
  11. #include <stdio.h>
  12.  
  13. #include <pfs.h>
  14. #include "config.h"                /* gf */
  15. #include "stringdefs.h"                /* gf */
  16.  
  17. static VLINK    lfree = NULL;
  18. int        vlink_count = 0;
  19. int        vlink_max = 0;
  20.  
  21. /*
  22.  * vlalloc - allocate and initialize vlink structure
  23.  *
  24.  *    VLALLOC returns a pointer to an initialized structure of type
  25.  *    VLINK.  If it is unable to allocate such a structure, it
  26.  *    returns NULL.
  27.  */
  28. VLINK
  29. vlalloc()
  30.     {
  31.     VLINK    vl;
  32.     if(lfree) {
  33.         vl = lfree;
  34.         lfree = lfree->next;
  35.     }
  36.     else {
  37.         vl = (VLINK) malloc(sizeof(VLINK_ST));
  38.         if (!vl) return(NULL);
  39.         vlink_max++;
  40.     }
  41.  
  42.     vlink_count++;
  43.  
  44.     /* Initialize and fill in default values */
  45.     /* Since all but four are set to a zero-value,
  46.        why not just wipe it clean?  */
  47.     BZERO(vl);
  48.  
  49.     vl->linktype = 'L';
  50.     vl->type = stcopy("FILE");
  51.     vl->hosttype = stcopy("INTERNET-D");
  52.     vl->nametype = stcopy("ASCII");
  53.  
  54.     return(vl);
  55.     }
  56.  
  57. /*
  58.  * vlfree - free a VLINK structure
  59.  *
  60.  *    VLFREE takes a pointer to a VLINK structure and adds it to
  61.  *    the free list for later reuse.
  62.  */
  63. void
  64. vlfree(vl)
  65.     VLINK    vl;
  66.     {
  67.         extern int string_count;
  68.  
  69.     if(vl->dontfree) return;
  70.     /* many of these don't need to call stfree(); since a check
  71.        for pointer validity's already done before even calling
  72.        it, we can just call free() here then do one big decrement
  73.        of string_count at the end.  */
  74.     if(vl->name) free(vl->name);
  75.     stfree(vl->type);
  76.     if(vl->replicas) vllfree(vl->replicas);
  77.     stfree(vl->hosttype);
  78.     if(vl->host) free(vl->host);
  79.     stfree(vl->nametype);
  80.     if(vl->filename) free(vl->filename);
  81.     if(vl->args) free(vl->args);
  82.     if(vl->lattrib) atlfree(vl->lattrib);
  83.     /* No allocation routines for f_info yet */
  84.     vl->f_info = NULL;
  85.     vl->next = lfree;
  86.     vl->previous = NULL;
  87.     lfree = vl;
  88.     vlink_count--;
  89.     string_count -= 4; /* freed name, host, filename, and args */
  90.     }
  91.  
  92. /*
  93.  * vllfree - free a VLINK structure
  94.  *
  95.  *    VLLFREE takes a pointer to a VLINK structure frees it and any linked
  96.  *    VLINK structures.  It is used to free an entrie list of VLINK
  97.  *    structures.
  98.  */
  99. void
  100. vllfree(vl)
  101.     VLINK    vl;
  102.     {
  103.     VLINK    nxt;
  104.  
  105.     while((vl != NULL) && !vl->dontfree) {
  106.         nxt = vl->next;
  107.         vlfree(vl);
  108.         vl = nxt;
  109.     }
  110.     }
  111.  
  112.